<?php

function getAlternativeImages($cards) {

	$urls = array();
	foreach ($cards as $card) {
	  $ofs = mt_rand($min, $max);
	  $key = $card->getKey();
	  $urls[$key] = 'http://www.google.com/images?q=' . $key . '&start=' . $ofs . '&gbv=1';
	}
	
	$responds = multiRequest($urls);
	
	$f1='<div id="center_col">';
	$f2='<a href="/imgres?imgurl=';
	$f3='&amp;imgrefurl=';
	$images = array();
	
	foreach ($responds as $key => $data) {
	  if (!$data) {
		$images[$key] = strtolower("pic/" . $key . ".jpg");
		continue;
	  }
	  
	  $pos1=strpos($data, $f1)+strlen($f1);
	  if ($pos1==FALSE) {
		$images[$key] = strtolower("pic/" . $key . ".jpg");
		continue;
	  }
	  
	  $pos2=strpos($data, $f2, $pos1)+strlen($f2);
	  if ($pos2==FALSE) {
		$images[$key] = strtolower("pic/" . $key . ".jpg");
		continue;
	  }
	  
	  $pos3=strpos($data, $f3, $pos2);
	  if ($pos3==FALSE) {
		$images[$key] = strtolower("pic/" . $key . ".jpg");
		continue;
	  }
		
	  $images[$key] = substr($data, $pos2, $pos3-$pos2);
	}
	return $images;
}
	
function multiRequest($data, $options = array()) {

  // array of curl handles
  $curly = array();
  // data to be returned
  $result = array();

  // multi handle
  $mh = curl_multi_init();

  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {

    $curly[$id] = curl_init();

    $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
    curl_setopt($curly[$id], CURLOPT_URL,            $url);
    curl_setopt($curly[$id], CURLOPT_HEADER,         0);
    curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);

    // post?
    if (is_array($d)) {
      if (!empty($d['post'])) {
        curl_setopt($curly[$id], CURLOPT_POST,       1);
        curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
      }
    }

    // extra options?
    if (!empty($options)) {
      curl_setopt_array($curly[$id], $options);
    }

    curl_multi_add_handle($mh, $curly[$id]);
  }

  // execute the handles
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);

  // get content and remove handles
  foreach($curly as $id => $c) {
    $urlData = curl_multi_getcontent($c);
	$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);
	if($httpcode>=200 && $httpcode<300){  
		$result[$id] = $urlData;
    } else {  
		$result[$id] = null;
    }  
    curl_multi_remove_handle($mh, $c);
  }

  // all done
  curl_multi_close($mh);

  return $result;
}

?>